﻿using Amazon.SQS;
using Amazon.SQS.Model;
using System;
using System.Diagnostics;

namespace QueueInAmazon
{
    class Program
    {
        public static void Main(string[] args)
        {
            #region użycie SQS
            try
            {
                #region stworzenie kolejki
                // stworzenie konfiguracji kolejki
                AmazonSQSConfig amazonSQSConfig = new AmazonSQSConfig();
                // określenie regionu w którym zostanie dodana kolejka
                amazonSQSConfig.ServiceURL = "http://sqs.eu-west-1.amazonaws.com";
                // stworzenie klienta dla kolejki
                AmazonSQSClient amazonSQSClient = new AmazonSQSClient(amazonSQSConfig);
                // stworzenie obiektu kolejki
                CreateQueueRequest createQueueRequest = new CreateQueueRequest();
                // dodanie nazwy dla kolejki
                createQueueRequest.QueueName = "KolejkaBeZet";
                // stworzenie kolejki w chmurze
                CreateQueueResponse createQueueResponse = amazonSQSClient.CreateQueue(createQueueRequest);
                #endregion

                #region dodanie wiadomości
                // scieżka do kolejki
                string urlQueue = string.Format("{0}/{1}/{2}", "https://queue.amazonaws.com", "739976947818", "KolejkaBeZet");
                // stworzenie komunikatu
                SendMessageRequest sendMessageRequest = new SendMessageRequest();
                sendMessageRequest.QueueUrl = urlQueue;
                sendMessageRequest.MessageBody = "TEST";
                // wysłanie komunikatu
                SendMessageResponse sendMessageResponse = amazonSQSClient.SendMessage(sendMessageRequest);
                #endregion

                #region odebranie wiadomości
                // stworzenie obiektu odbierającego wiadomość 
                ReceiveMessageRequest recieveMessageRequest = new ReceiveMessageRequest();
                // ustawienie adresu odbioru z poprzedniego ustawienia podczas wysyłania
                recieveMessageRequest.QueueUrl = urlQueue;
                // operacja odbioru wiadomości
                ReceiveMessageResponse receiveMessageResponse = amazonSQSClient.ReceiveMessage(recieveMessageRequest);
                //sprawdzenie czy są jakiekolwiek wiadomości
                if (receiveMessageResponse.Messages.Count != 0)
                {
                    for (int i = 0; i < receiveMessageResponse.Messages.Count; i++)
                        // wyświetlenie treści wiadomości
                        Console.WriteLine(receiveMessageResponse.Messages[i].Body);
                }
                #endregion

                #region usuwanie wiadomości
                // stworzenie obiektu do usuwania
                DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest();
                // podanie ścieżki do kolejki
                deleteMessageRequest.QueueUrl = urlQueue;
                // podanie wskaźnika do wiadomości
                deleteMessageRequest.ReceiptHandle = receiveMessageResponse.Messages[0].ReceiptHandle;
                // usunięcie wiadomości 
                DeleteMessageResponse response = amazonSQSClient.DeleteMessage(deleteMessageRequest);
	            #endregion
            }
            catch (Exception e)
            {

            }
            #endregion
            Console.Read();
        }
    }
}